package Year22_Month04.day14;

public class 水果成篮 {
    public int totalFruit(int[] fruits) {
        int left = 0;
        int n = fruits.length;
        if(n < 2){
            return n;
        }
        int max = 2;//这里设置最长区间的下标，2就是最小值了
        int[] arr = new int[n];//创建一个数组用来记录每个数组出现的次数
        int count = 0;//用count来控制数组里面元素不为0的个数，也就是只能用两个篮子来装水果
        for (int right = 0; right < n; right++) {
            if (arr[fruits[right]] == 0){
                count++;//如果这个水果之前没有出现过，那么证明就是第一次入篮，count就+1
            }
            arr[fruits[right]] += 1;//更新每个水果对应出现次数
           while(count > 2){
               arr[fruits[left]]--;
               //这里注意了，因为我们这里还要用left来判断count，所以不能后面不能直接跟left++
               if(arr[fruits[left]] == 0) count--;
               left++;
           }
           max = Math.max(max,right - left + 1);//取连续下标区间最长的
        }
        return max;
    }
}
